package dbservice

import (
	"fmt"
	"src/zeus/logger"
)

/*
用于Login服的登录逻辑
可以不去DB查询，而从redis里登录，拿到用户数据包括：uid

*/

// // GetLoginKeyName 在LoginRedis里使用keyname拿数据
// func GetLoginKeyName(keyname string) []byte {
// 	rd := GetLoginRedis()
// 	defer rd.Dispose()

// 	result, err := rd.GetBytes(keyname)
// 	if err != nil {
// 		logger.Error("loginutil.GetLoginKeyName:", err)
// 	}
// 	return result
// }

// LoginOpenUtil 存储openid、channelid 映射到 uid 的cache
type LoginOpenUtil struct {
	openid    string
	channelid string
	//uid       uint64//UNUSED
}

// GetLoginOpenID 创建一个LoginOpenID
func GetLoginOpenID(openid, channelid string) *LoginOpenUtil {
	return &LoginOpenUtil{
		openid:    openid,
		channelid: channelid,
	}
}

func (utilmd *LoginOpenUtil) Key() string {
	return fmt.Sprint("LoginOpen:", utilmd.openid, ":", utilmd.channelid)
}

// SetOpenMD 写入数据
func (utilmd *LoginOpenUtil) SetOpenMD(data []byte) {
	rd := GetLoginRedis()
	defer rd.Dispose()
	err := rd.SetNX(rd.Ctx, utilmd.Key(), data, Expire_Time).Err()
	if err != nil {
		logger.Errorf("LoginOpenUtil.SetOpenMD:%s", err)
	}
	// if _, err := rd.SetBytes(utilmd.Key(), data, utilmd.GetExSecond(), redislib.Set_No_NX_XX); err != nil {
	// 	logger.Error("LoginOpenUtil.SetOpenMD:", err)
	// }
}

// ReOpenMDEx 刷新时间
func (utilmd *LoginOpenUtil) ReOpenMDEx() bool {
	rd := GetLoginRedis()
	defer rd.Dispose()
	rd.Expire(rd.Ctx, utilmd.Key(), Expire_Time)
	return true
	// if v, err := rd.Expire(utilmd.Key(), utilmd.GetExSecond()); err != nil {
	// 	logger.Error("LoginOpenUtil.ReOpenMDEx:", err)
	// 	return false
	// } else {
	// 	return v == 1
	// }
}

// GetOpenMD 获取数据
func (utilmd *LoginOpenUtil) GetOpenMD() []byte {
	rd := GetLoginRedis()
	defer rd.Dispose()

	if result, err := rd.Get(rd.Ctx, utilmd.Key()).Bytes(); err != nil {
		// logger.Warn("LoginOpenUtil.GetOpenMD:", err)
		return result
	} else {
		return result
	}

}
